home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / awt / LightweightDispatcher.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.0 KB  |  296 lines

  1. package java.awt;
  2.  
  3. import java.awt.event.AWTEventListener;
  4. import java.awt.event.MouseEvent;
  5. import java.awt.event.MouseWheelEvent;
  6. import java.io.Serializable;
  7. import java.security.AccessController;
  8. import sun.awt.AppContext;
  9. import sun.awt.DebugHelper;
  10. import sun.awt.SunToolkit;
  11. import sun.awt.dnd.SunDropTargetEvent;
  12.  
  13. class LightweightDispatcher implements Serializable, AWTEventListener {
  14.    private static final long serialVersionUID = 5184291520170872969L;
  15.    private static final int LWD_MOUSE_DRAGGED_OVER = 1500;
  16.    private static final DebugHelper dbg = DebugHelper.create(LightweightDispatcher.class);
  17.    private Container nativeContainer;
  18.    private Component focus;
  19.    private transient Component mouseEventTarget;
  20.    private transient Component targetLastEntered;
  21.    private transient boolean isMouseInNativeContainer = false;
  22.    private Cursor nativeCursor;
  23.    private long eventMask;
  24.    private static final long PROXY_EVENT_MASK = 131132L;
  25.    private static final long MOUSE_MASK = 131120L;
  26.  
  27.    LightweightDispatcher(Container var1) {
  28.       this.nativeContainer = var1;
  29.       this.mouseEventTarget = null;
  30.       this.eventMask = 0L;
  31.    }
  32.  
  33.    void dispose() {
  34.       this.stopListeningForOtherDrags();
  35.       this.mouseEventTarget = null;
  36.    }
  37.  
  38.    void enableEvents(long var1) {
  39.       this.eventMask |= var1;
  40.    }
  41.  
  42.    boolean dispatchEvent(AWTEvent var1) {
  43.       boolean var2 = false;
  44.       if (var1 instanceof SunDropTargetEvent) {
  45.          SunDropTargetEvent var3 = (SunDropTargetEvent)var1;
  46.          var2 = this.processDropTargetEvent(var3);
  47.       } else {
  48.          if (var1 instanceof MouseEvent && (this.eventMask & 131120L) != 0L) {
  49.             MouseEvent var4 = (MouseEvent)var1;
  50.             var2 = this.processMouseEvent(var4);
  51.          }
  52.  
  53.          if (var1.getID() == 503) {
  54.             this.nativeContainer.updateCursorImmediately();
  55.          }
  56.       }
  57.  
  58.       return var2;
  59.    }
  60.  
  61.    private boolean isMouseGrab(MouseEvent var1) {
  62.       int var2 = var1.getModifiersEx();
  63.       if (var1.getID() == 501 || var1.getID() == 502) {
  64.          switch (var1.getButton()) {
  65.             case 1:
  66.                var2 ^= 1024;
  67.                break;
  68.             case 2:
  69.                var2 ^= 2048;
  70.                break;
  71.             case 3:
  72.                var2 ^= 4096;
  73.          }
  74.       }
  75.  
  76.       return (var2 & 7168) != 0;
  77.    }
  78.  
  79.    private boolean processMouseEvent(MouseEvent var1) {
  80.       int var2 = var1.getID();
  81.       Component var3 = this.nativeContainer.getMouseEventTarget(var1.getX(), var1.getY(), true);
  82.       this.trackMouseEnterExit(var3, var1);
  83.       if (!this.isMouseGrab(var1) && var2 != 500) {
  84.          this.mouseEventTarget = var3 != this.nativeContainer ? var3 : null;
  85.       }
  86.  
  87.       if (this.mouseEventTarget != null) {
  88.          switch (var2) {
  89.             case 500:
  90.                if (var3 == this.mouseEventTarget) {
  91.                   this.retargetMouseEvent(var3, var2, var1);
  92.                }
  93.                break;
  94.             case 501:
  95.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  96.                break;
  97.             case 502:
  98.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  99.                break;
  100.             case 503:
  101.                this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  102.             case 504:
  103.             case 505:
  104.             default:
  105.                break;
  106.             case 506:
  107.                if (this.isMouseGrab(var1)) {
  108.                   this.retargetMouseEvent(this.mouseEventTarget, var2, var1);
  109.                }
  110.                break;
  111.             case 507:
  112.                DebugHelper var10000 = dbg;
  113.                this.retargetMouseEvent(var3, var2, var1);
  114.          }
  115.  
  116.          var1.consume();
  117.       }
  118.  
  119.       return var1.isConsumed();
  120.    }
  121.  
  122.    private boolean processDropTargetEvent(SunDropTargetEvent var1) {
  123.       int var2 = var1.getID();
  124.       int var3 = var1.getX();
  125.       int var4 = var1.getY();
  126.       if (!this.nativeContainer.contains(var3, var4)) {
  127.          Dimension var5 = this.nativeContainer.getSize();
  128.          if (var5.width <= var3) {
  129.             var3 = var5.width - 1;
  130.          } else if (var3 < 0) {
  131.             var3 = 0;
  132.          }
  133.  
  134.          if (var5.height <= var4) {
  135.             var4 = var5.height - 1;
  136.          } else if (var4 < 0) {
  137.             var4 = 0;
  138.          }
  139.       }
  140.  
  141.       Component var6 = this.nativeContainer.getDropTargetEventTarget(var3, var4, true);
  142.       this.trackMouseEnterExit(var6, var1);
  143.       if (var6 != this.nativeContainer && var6 != null) {
  144.          switch (var2) {
  145.             case 504:
  146.             case 505:
  147.                break;
  148.             default:
  149.                this.retargetMouseEvent(var6, var2, var1);
  150.                var1.consume();
  151.          }
  152.       }
  153.  
  154.       return var1.isConsumed();
  155.    }
  156.  
  157.    private void trackMouseEnterExit(Component var1, MouseEvent var2) {
  158.       Component var3 = null;
  159.       int var4 = var2.getID();
  160.       if (var2 instanceof SunDropTargetEvent && var4 == 504 && this.isMouseInNativeContainer) {
  161.          this.targetLastEntered = null;
  162.       } else if (var4 != 505 && var4 != 506 && var4 != 1500 && !this.isMouseInNativeContainer) {
  163.          this.isMouseInNativeContainer = true;
  164.          this.startListeningForOtherDrags();
  165.       } else if (var4 == 505) {
  166.          this.isMouseInNativeContainer = false;
  167.          this.stopListeningForOtherDrags();
  168.       }
  169.  
  170.       if (this.isMouseInNativeContainer) {
  171.          var3 = var1;
  172.       }
  173.  
  174.       if (this.targetLastEntered != var3) {
  175.          if (this.targetLastEntered != null) {
  176.             this.retargetMouseEvent(this.targetLastEntered, 505, var2);
  177.          }
  178.  
  179.          if (var4 == 505) {
  180.             var2.consume();
  181.          }
  182.  
  183.          if (var3 != null) {
  184.             this.retargetMouseEvent(var3, 504, var2);
  185.          }
  186.  
  187.          if (var4 == 504) {
  188.             var2.consume();
  189.          }
  190.  
  191.          this.targetLastEntered = var3;
  192.       }
  193.    }
  194.  
  195.    private void startListeningForOtherDrags() {
  196.       AccessController.doPrivileged(new 1(this));
  197.    }
  198.  
  199.    private void stopListeningForOtherDrags() {
  200.       AccessController.doPrivileged(new 2(this));
  201.    }
  202.  
  203.    public void eventDispatched(AWTEvent var1) {
  204.       boolean var2 = var1 instanceof MouseEvent && !(var1 instanceof SunDropTargetEvent) && var1.id == 506 && var1.getSource() != this.nativeContainer;
  205.       if (var2) {
  206.          MouseEvent var3 = (MouseEvent)var1;
  207.          MouseEvent var4;
  208.          synchronized(this.nativeContainer.getTreeLock()) {
  209.             Component var6 = var3.getComponent();
  210.             if (!var6.isShowing()) {
  211.                return;
  212.             }
  213.  
  214.             Container var7;
  215.             for(var7 = this.nativeContainer; var7 != null && !(var7 instanceof Window); var7 = ((Component)var7).getParent_NoClientCode()) {
  216.             }
  217.  
  218.             if (var7 == null || ((Window)var7).isModalBlocked()) {
  219.                return;
  220.             }
  221.  
  222.             var4 = new MouseEvent(this.nativeContainer, 1500, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var3.getX(), var3.getY(), var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), var3.getButton());
  223.             ((AWTEvent)var3).copyPrivateDataInto(var4);
  224.             Point var8 = var6.getLocationOnScreen();
  225.             if (AppContext.getAppContext() != this.nativeContainer.appContext) {
  226.                3 var10 = new 3(this, var4, var8);
  227.                SunToolkit.executeOnEventHandlerThread(this.nativeContainer, var10);
  228.                return;
  229.             }
  230.  
  231.             if (!this.nativeContainer.isShowing()) {
  232.                return;
  233.             }
  234.  
  235.             Point var9 = this.nativeContainer.getLocationOnScreen();
  236.             var4.translatePoint(var8.x - var9.x, var8.y - var9.y);
  237.          }
  238.  
  239.          Component var5 = this.nativeContainer.getMouseEventTarget(var4.getX(), var4.getY(), true);
  240.          this.trackMouseEnterExit(var5, var4);
  241.       }
  242.    }
  243.  
  244.    void retargetMouseEvent(Component var1, int var2, MouseEvent var3) {
  245.       if (var1 != null) {
  246.          int var4 = var3.getX();
  247.          int var5 = var3.getY();
  248.  
  249.          Object var6;
  250.          for(var6 = var1; var6 != null && var6 != this.nativeContainer; var6 = ((Component)var6).getParent()) {
  251.             var4 -= ((Component)var6).x;
  252.             var5 -= ((Component)var6).y;
  253.          }
  254.  
  255.          if (var6 != null) {
  256.             Object var7;
  257.             if (var3 instanceof SunDropTargetEvent) {
  258.                var7 = new SunDropTargetEvent(var1, var2, var4, var5, ((SunDropTargetEvent)var3).getDispatcher());
  259.             } else if (var2 == 507) {
  260.                var7 = new MouseWheelEvent(var1, var2, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var4, var5, var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), ((MouseWheelEvent)var3).getScrollType(), ((MouseWheelEvent)var3).getScrollAmount(), ((MouseWheelEvent)var3).getWheelRotation());
  261.             } else {
  262.                var7 = new MouseEvent(var1, var2, var3.getWhen(), var3.getModifiersEx() | var3.getModifiers(), var4, var5, var3.getXOnScreen(), var3.getYOnScreen(), var3.getClickCount(), var3.isPopupTrigger(), var3.getButton());
  263.             }
  264.  
  265.             ((AWTEvent)var3).copyPrivateDataInto((AWTEvent)var7);
  266.             if (var1 == this.nativeContainer) {
  267.                ((Container)var1).dispatchEventToSelf((AWTEvent)var7);
  268.             } else {
  269.                assert AppContext.getAppContext() == var1.appContext;
  270.  
  271.                if (this.nativeContainer.modalComp != null) {
  272.                   if (((Container)this.nativeContainer.modalComp).isAncestorOf(var1)) {
  273.                      var1.dispatchEvent((AWTEvent)var7);
  274.                   } else {
  275.                      var3.consume();
  276.                   }
  277.                } else {
  278.                   var1.dispatchEvent((AWTEvent)var7);
  279.                }
  280.             }
  281.          }
  282.  
  283.       }
  284.    }
  285.  
  286.    // $FF: synthetic method
  287.    static Container access$000(LightweightDispatcher var0) {
  288.       return var0.nativeContainer;
  289.    }
  290.  
  291.    // $FF: synthetic method
  292.    static void access$100(LightweightDispatcher var0, Component var1, MouseEvent var2) {
  293.       var0.trackMouseEnterExit(var1, var2);
  294.    }
  295. }
  296.